package com.cmc.cloud.cmclink.doc.service;

import com.cmc.cloud.cmclink.doc.entity.BlnoRuleKlcodeDO;
import com.cmc.cloud.cmclink.doc.vo.blnoruleklcodevo.BlnoRuleKlcodeCreateReqVO;
import com.cmc.cloud.cmclink.doc.vo.blnoruleklcodevo.BlnoRuleKlcodePageReqVO;
import com.cmc.cloud.cmclink.doc.vo.blnoruleklcodevo.BlnoRuleKlcodeRespVO;
import com.cmc.cloud.cmclink.doc.vo.blnoruleklcodevo.BlnoRuleKlcodeUpdateReqVO;
import com.cmes.framework.common.pojo.PageResult;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 订舱号提单号规则 三位码 Service 接口
 *
 * @author 招商轮船-管理员
 */
public interface BlnoRuleKlcodeService {

    /**
     * 创建订舱号提单号规则 三位码
     *
     * @param createReqVO 创建信息
     */
    void createBlnoRuleKlcode(@Valid BlnoRuleKlcodeCreateReqVO createReqVO);

    /**
     * 更新订舱号提单号规则 三位码
     *
     * @param updateReqVO 更新信息
     */
    void updateBlnoRuleKlcode(@Valid BlnoRuleKlcodeUpdateReqVO updateReqVO);

    /**
     * 删除订舱号提单号规则 三位码
     *
     * @param id 编号
     */
    void deleteBlnoRuleKlcode(Long id);

    /**
     * 获得订舱号提单号规则 三位码
     *
     * @param id 编号
     * @return 订舱号提单号规则 三位码
     */
    BlnoRuleKlcodeDO getBlnoRuleKlcode(Long id);

    /**
     * 获得订舱号提单号规则 三位码列表
     *
     * @param ids 编号
     * @return 订舱号提单号规则 三位码列表
     */
    List<BlnoRuleKlcodeDO> getBlnoRuleKlcodeList(Collection<Long> ids);

    /**
     * 获得订舱号提单号规则 三位码分页
     *
     * @param pageReqVO 分页查询
     * @return 订舱号提单号规则 三位码分页
     */
    PageResult<BlnoRuleKlcodeRespVO> getBlnoRuleKlcodePage(BlnoRuleKlcodePageReqVO pageReqVO);

    /**
     * 获得订舱号提单号规则 三位码,未获取，直接创建
     *
     * @param bkpCodes   查询
     * @param needCreate 是否需要新建
     * @return 三位码
     */
    Map<String, String> findRuleByBkpCodeAndCreate(List<String> bkpCodes, boolean needCreate);
}
